\section{Introducci'on}

La arquitectura IA32 provee de una serie de mecanismos que facilitan la implementaci'on de las tareas mas habituales que deben realizar los sitemas operativos \textit{multi usuario} y \textit{multi tasking}. Dichas tareas se pueden dividir en cuatro grupos: administraci'on de memoria, manejo de interrupciones, manejo de tareas, y proteccion. 

El objetivo de este trabajo pr'actico es aplicar los conceptos de \textit{system programing} vistos en clase, desde una perpectiva pr'actica, en la implementaci'on de un peque'no sistema operativo capaz de manejar una cierta cantidad de tareas concurrentemente. Para ello activaremos mecanismos para los tres primeros grupos, concentrandonos especialmente en el manejo de tareas.

Sin embargo para usufructuar dichas caracter'isticas de la arquitectura debemos preparar ciertas estructuras de datos en memoria que permiten al procesador realizar mecanismos de forma autom'atica. En el secci'on \ref{sec:modo-protegido} describiremos los pasos que realizamos para activar las caracter'isticas iniciales de este modo de trabajo del procesador(modo protegido). En la secci'on \ref{sec:interrupciones} explicaremos de que manera manejamos las excepciones, interrupciones de software y hardware en nuestro sistema, utilizando los mecanismos provistos por el procesador. 

En la secci'on \ref{sec:paginacion} cubriremos la administraci'on de memoria de nuestro peque'no kernel, mientras que en la secci'on \ref{sec:tareas} explicaremos como se manejan las tareas y el \textit{multi tasking} de nuestro sistema. Por 'ultimo en la seccion \ref{sec:conclusiones} recapitularemos algunas de las experiencias obtenidas en el proceso de desarrollo de 'este trabajo pr'actico.

En el ap'endice \ref{sec:debug} examinaremos las funciones de debug y testing que escribimos para facilitarnos el desarrollo del kernel. Mientras en que en el ap'endice \ref{sec:hack} explicamos c'omo modificamos el archivo tareas.tsk para que sea mas 'util a la hora de probar nuestro sistema.






